package pattern7.threadPool.demo;

import utils.PrintUtil;

import java.util.Queue;

/**
 * @创建人 liweijia
 * @创建时间 2022/7/31
 * @描述 工作线程
 */
public class WorkThread extends Thread {

    /**
     * 任务队列
     */
    private final Queue<Runnable> taskQueue;

    public WorkThread(Queue<Runnable> taskQueue) {
        this.taskQueue = taskQueue;
    }

    @Override
    public void run() {
        PrintUtil.print("工作线程开始运行");
        while (true) {
            Runnable task;
            synchronized (taskQueue) {
                // 打断判断
                if (Thread.currentThread().isInterrupted()) {
                    PrintUtil.print("工作线程被打断");
                    break;
                }
                // 一直等待
                while (taskQueue.isEmpty()) {
                    try {
                        PrintUtil.print("工作线程阻塞，等待任务");
                        taskQueue.wait();
                    } catch (InterruptedException e) {
                        Thread.currentThread().interrupt();
                    }
                }
                // 拿到任务了，执行
                task = taskQueue.poll();
                taskQueue.notifyAll();
            }
            task.run();
        }
    }
}
